package com.renbang.utils.messgedigest;

import static org.junit.Assert.*;

import java.math.BigInteger;

import org.junit.Test;

public class CoderTest {

//	public static void main(String[] args) throws Exception {
//		// InputStream fis = new FileInputStream("F:/ma.jpg");//读取源文件
//		InputStream fis = new FileInputStream("F:/base64.txt");// 读取base64码字符串文件
//		// PrintWriter pw = new PrintWriter("F:/base64.txt");//写入base64码字符串
//		OutputStream os = new FileOutputStream("F:/yanzma.jpg");// 写入新文件
//
//		byte[] datas = new byte[fis.available()];
//
//		fis.read(datas, 0, datas.length);
//		fis.close();
//
////		String code = Coder.encryptBASE64(datas);
//		// System.err.println("BASE64加密后:\n" + code);
////		pw.print(code);
//		// pw.close();
//
//		String sb = new String(datas);
//		System.out.println("得到文件base64字符串" + sb);
//		byte[] datas2 = Coder.decryptBASE64(sb);// 解密成原byte数组
//		os.write(datas2);// 写入新文件
//		os.close();
//		//
//	}
	
	@Test
	public void test() throws Exception {
		String inputStr = "在座的各位，都是辣鸡。";
		System.err.println("原文:\n" + inputStr);

		byte[] inputData = inputStr.getBytes();
		String code = Coder.encryptBASE64(inputData);

		System.err.println("BASE64加密后:\n" + code);

		byte[] output = Coder.decryptBASE64(code);

		String outputStr = new String(output);

		System.err.println("BASE64解密后:\n" + outputStr);

		// 验证BASE64加密解密一致性
		assertEquals(inputStr, outputStr);

		// 验证MD5对于同一内容加密是否一致
		assertArrayEquals(Coder.encryptMD5(inputData),
				Coder.encryptMD5(inputData));

		// 验证SHA对于同一内容加密是否一致
		assertArrayEquals(Coder.encryptSHA(inputData),
				Coder.encryptSHA(inputData));

		String key = Coder.initMacKey();
		System.err.println("Mac密钥:\n" + key);

		// 验证HMAC对于同一内容，同一密钥加密是否一致
		assertArrayEquals(Coder.encryptHMAC(inputData, key),
				Coder.encryptHMAC(inputData, key));

		BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData));
		System.err.println("MD5:\n" + md5.toString(16));

		BigInteger sha = new BigInteger(Coder.encryptSHA(inputData));
		System.err.println("SHA:\n" + sha.toString(16));
		// -1c3024bd867aefde2d236bbd9a87c65e
		BigInteger mac = new BigInteger(Coder.encryptHMAC(inputData, key));
		System.err.println("HMAC:\n" + mac.toString(16));
	}
}